/*******************************************
  Jose Andres Lara Vecino

  Author       : $Author: cainlara@gmail.com $
  Last CheckIn : $Date: 2012-06-22 20:12:29 +0000 (Fri, 22 Jun 2012) $
  Revision     : $Revision: 97 $
*******************************************/

package gui.proyecto;

import java.awt.Color;
import java.io.Serializable;

import mensaje.Mensaje;
import utilidad.Util;
import api.IProyectoAPI;
import control.App;
import control.IPropiedadesSistema;
import core.ManejadorLog;
import frente.Proyecto;
import gui.dialogo.DialogoMensaje;

/**
 * Controla un panel de edicion.
 * <P>
 * Esta clase, administra la implementacion 
 * de la logica necesaria en el <code>EditarProyectoPanel</code>.
 * 
 * @see Proyecto
 * @see EditarProyectoPanel
 * 
 * @author jose.lara 07.06.2012
 */
public class EditarProyectoPanelControlador implements Serializable {
    private static final long serialVersionUID = 2493573223352036063L;
    
    private static final int PUEDE_GUARDAR              = 0;
    private static final int NO_PUEDE_GUARDAR_VACIOS    = 1;
    private static final int NO_PUEDE_GUARDAR_LARGOS    = 2;
    
    private EditarProyectoPanel panel = null;
    
    public EditarProyectoPanelControlador(EditarProyectoPanel panel) {
        this.panel = panel;
    }
    
    private EditarProyectoPanel getPanel() {
        return panel;
    }
    
    protected void guardar(Proyecto proyecto) {
        IProyectoAPI proyectoAPI    = null;
        int puede                   = -1;
        
        try {
            puede = validacionDatos();
            
            if(puede == PUEDE_GUARDAR) {
                if(proyecto == null) {
                    proyecto = new Proyecto();
                }
                
                proyecto.setDescripcion(getPanel().getDescripcionTextArea().getText());
                proyecto.setNombre(getPanel().getNombreTextField().getText());
                proyecto.setVersion(getPanel().getVersionTextField().getText());
                proyecto.setColor(obtenerColor());
                
                proyectoAPI = App.getSesion().getProyectoAPI();
                
                proyectoAPI.guardarProyecto(proyecto);
            }
            else if(puede == NO_PUEDE_GUARDAR_VACIOS) {
                DialogoMensaje.mostrarMensajeError(getPanel(), Mensaje.getMensaje("ERROR_CAMPOS_V"));
            }
            else if(puede == NO_PUEDE_GUARDAR_LARGOS) {
                DialogoMensaje.mostrarMensajeError(getPanel(), Mensaje.getMensaje("ERROR_CAMPOS_L"));
            }
        }
        catch(Exception e) {
            ManejadorLog.escribirErrorEnLog(e);
            DialogoMensaje.mostrarMensajeError(getPanel(), Mensaje.getMensaje("ERROR-GUARDADO"));
        }
    }
    
    private int validacionDatos() {
        String nombre       = null;
        String version      = null;
        String descripcion  = null;
        int puede           = PUEDE_GUARDAR;
        
        nombre = getPanel().getNombreTextField().getText();
        version = getPanel().getVersionTextField().getText();
        descripcion = getPanel().getDescripcionTextArea().getText();
        
        if(!Util.cadenasValidas(nombre, version, descripcion)
           || getPanel().getColorSeleccionado() == null) {
            puede = NO_PUEDE_GUARDAR_VACIOS;
        }
        else if(nombre.length() > IPropiedadesSistema.LONGITUD_CORTO
                || version.length() > IPropiedadesSistema.LONGITUD_CORTO
                || descripcion.length() > IPropiedadesSistema.LONGITUD_LARGO) {
            puede = NO_PUEDE_GUARDAR_LARGOS;
        }
        
        return puede;
    }
    
    public boolean puedeGuardar() {
        return validacionDatos() == PUEDE_GUARDAR;
    }
    
    private String obtenerColor() {
        Color colorProyecto = null;
        String colorValor   = null;
        
        colorProyecto = getPanel().getColorSeleccionado();
        
        if(colorProyecto == null) {
            colorProyecto = Color.GRAY;
        }
        
        colorValor = Integer.toHexString(colorProyecto.getRGB());
        colorValor = colorValor.substring(2, colorValor.length());
        colorValor = colorValor.toUpperCase();
        colorValor = "#" + colorValor;
        
        return colorValor;
    }
}